package com.hui.stock.mapper;

import com.hui.stock.pojo.domain.*;
import com.hui.stock.pojo.entity.StockRtInfo;
import org.apache.ibatis.annotations.Param;

import java.util.Date;
import java.util.List;
import java.util.Map;

/**
* @author ymh
* @description 针对表【stock_rt_info(个股详情信息表)】的数据库操作Mapper
* @createDate 2024-11-11 16:04:25
* @Entity com.hui.stock.pojo.entity.StockRtInfo
*/
public interface StockRtInfoMapper {

    int deleteByPrimaryKey(Long id);

    int insert(StockRtInfo record);

    int insertSelective(StockRtInfo record);

    StockRtInfo selectByPrimaryKey(Long id);

    int updateByPrimaryKeySelective(StockRtInfo record);

    int updateByPrimaryKey(StockRtInfo record);

    /**
     *查询最新股票交易时间点下沪深两市个股行情数据，并根据涨幅降序排序展示
     * @param curDate 指定时间
     * @return
     */
    List<StockUpdownDomain> getStockPageInfo(@Param("curDate") Date curDate);

    /**
     * 查询最新股票交易时间点下沪深两市个股行情的前四条数据，并根据涨幅降序排序展示
     * @param curDate 指定时间
     * @return
     */
    List<StockUpdownDomain> getStockRtInfo(Date curDate);

    /**
     * 查询指定时间范围内每分钟涨停或者跌停的数量
     * @param openDate 开盘时间
     * @param curDate 结束时间 一般开始时间和结束时间在同一天
     * @param flag 1/0：获取涨/跌停
     * @return
     */
    // @MapKey("")//无意义，为了消除错误。返回的是list，不用管就行。如果返回的是map，需要指定key
    List<Map> getStockUpdownCount(@Param("openDate") Date openDate, @Param("curDate") Date curDate, @Param("flag") int flag);

    /**
     * @param openDate 开盘时间
     * @param curDate 当前有效交易时间
     * @param code 股票编码
     * @return 根据T日时间区间查询指定股票每分钟的交易数据
     */
    List<Stock4MinuteDomain> getStockScreenTimeSharing(@Param("openDate") Date openDate, @Param("curDate") Date curDate, @Param("code") String code);

    /**
     * 根据每天的结束时间获取指定股票每日的交易数据
     * @param code 股票代码
     * @param closeDates 结束时间列表
     * @return
     */
    List<Stock4EvrDayDomain> getStockScreenDkline(@Param("code") String code, @Param("closeDates") List<Date> closeDates);

    /**
     * 获取指定时间段每天的最大时间
     *
     * @param code
     * @param openDate
     * @param curDate
     * @return
     */
    List<Date> getCloseDates(@Param("code") String code, @Param("openDate") Date openDate, @Param("curDate") Date curDate);

    /**
     * 批量插入个股数据
     * @param stockRtInfos 插入数据列表
     * @return
     */
    int insertBatch(@Param("stockRtInfos") List<StockRtInfo> stockRtInfos);

    /**
     * 模糊查询：根据查询字符返回股票编码和股票名称
     * @param searchStr
     * @return
     */
    List<Map<String, Object>> getStockSearch(@Param("searchStr") String searchStr);

    /**
     *
     * @param openDate 开盘时间
     * @param curDate 当前有效交易时间
     * @param code 股票编码
     * @return 根据T日时间区间查询指定股票每分钟的交易数据
     */
    List<Stock4EvrWeekDomain> getStockScreenWeekkline(@Param("code") String code, @Param("openDate") Date openDate, @Param("curDate") Date curDate);

    /**
     * 根据股票编码和时间获取个股数据
     * @param code 股票编码
     * @param curDate 指定时间
     * @return
     */
    StockRtDomain getStockScreenSecondDetail(@Param("code") String code, @Param("curDate") Date curDate);

    /**
     *
     * @param code 股票编码
     * @param curDate 指定时间
     * @return 查询最新交易流水，按照交易时间降序取前10
     */
    List<StockScreenSecondDomain> getScreenSecondInfos(@Param("code") String code,@Param("openDate") Date openDate, @Param("curDate") Date curDate);
}
